const Service = require('egg').Service;
const { md5 } = require('utility')
const jwt = require('jsonwebtoken')
class UserService extends Service {

    async getBlog() {
        const { ctx, app } = this;
        const { keyword, tag, pageIndex, pageSize, startTime, endTime, type, user_id } = ctx.query;
        // 如何知道user_id
        // type 1 热门  2 最新 3热榜
        // 直接执行sql
        // const res = await app.mysql.query('select * from blogs')
        // CRUD select 找多条[{},{}] get 找一条{} insert update delete
        // select 不支持模糊查询 app.mysql.select('blogs') 
        let sql = `select * from blogs where 1=1 `
        if (keyword) { // 模糊查询
            sql += `and title like "%${keyword}%" `
        }
        if (tag) { // 分类查询
            sql += `and type = "${tag}" `
        }
        if (startTime) { // 开始时间
            sql += `and create_time>${startTime} `
        }
        if (endTime) { // 结束时间
            sql += `and create_time<${endTime} `
        }
        if (type == 1) { // 热门  浏览量最多的
            sql += `order by looks desc `
        }
        if (type == 2) { // 最新  时间最新的
            sql += `order by create_time desc `
        }
        if (type == 3) { // 热榜 一段时间内点赞最多的
            sql += `order by likes desc `
        }
        if (pageIndex && pageSize) { // 分页
            sql += `limit ${(pageIndex - 1) * pageSize},${pageSize}`
        }
        const res = await app.mysql.query(sql)
        // 根据用户id 获取这个用户点赞过得文章
        const likes = await app.mysql.select('likes', { where: { user_id }, columns: ['blog_id'] })
        const likeBlogList = likes.reduce((a, b) => {
            a.push(b.blog_id)
            return a
        }, [])
        // 判断这个用户是否点赞过这个文章  是的话返回true 否则false
        res.forEach(item => {
            if (likeBlogList.indexOf(item.id) !== -1) {
                item['isLike'] = true;
            } else {
                item['isLike'] = false;
            }
        })
        return res;
    }
    async addBlog() {
        const { ctx, app } = this;
        const { title, content, author, type, image } = ctx.request.body;
        const res = await app.mysql.insert('blogs', { title, content, author, type, image })
        return res;
    }
    async like() {
        const { ctx, app } = this;
        const { user_id, blog_id } = ctx.request.body;
        const isLike = await app.mysql.get('likes', { user_id, blog_id }) // 是否点过赞
        let res;
        if (isLike) {
            res = await app.mysql.delete('likes', { id: isLike.id }) // 取消
        } else {
            res = await app.mysql.insert('likes', { user_id, blog_id }) // 插入数据
        }
        const likes = await app.mysql.select('likes', { blog_id }) // 获取此文章当前点赞的数量
        await app.mysql.update('blogs', { id: blog_id, likes: likes.length }) // 更新文章点赞数量
        return res;
    }
    async getDetail() {
        const { ctx, app } = this;
        const { id } = ctx.params;
        // get 单个  select 多个
        const res = await app.mysql.get('blogs', { id })
        return res;
    }
    // 评论 和 回复评论
    async comment() {
        const { ctx, app } = this;
        const { content, author, user_id, blog_id, parent_id = 0 } = ctx.request.body;
        // get 单个  select 多个
        // 向评论表添加数据
        const res = await app.mysql.insert('comments', { content, author, user_id, blog_id, parent_id, create_time: Date.now() })
        // 修改文章评论数量
        const comments = await app.mysql.select('comments', { blog_id }) // 获取此文章当前评论的数量
        await app.mysql.update('blogs', { id: blog_id, comments: comments.length }) // 更新文章评论数量
        return res;
    }
    async getComments() {
        const { ctx, app } = this;
        const { blog_id } = ctx.query;
        const res = await app.mysql.select('comments', { blog_id })
        return res;
    }
}

module.exports = UserService;
